package com.hopu.service.MyArea;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hopu.entity.MyArea;
import com.hopu.mapper.MyAreaMapper;
import com.hopu.util.HouseResult;
import com.hopu.util.StaticData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @Package: com.hopu.service
 * @ClassName: MyAreaServiceImple
 * @Author: xiaoBao
 * @CreateTime: 2020/10/26 14:36
 * @Description:    片区信息管理服务层接口实现类
 */
@Service("myAreaServiceImple")   /**定义Service层*/
public class MyAreaServiceImple implements MyAreaService{
    @Autowired  //引入myAreaMapper动态接口（持久层）
    private MyAreaMapper myAreaMapper;


    /**
     * findAllAreaPageInfo 【查询片区信息的所有内容】
     * 【功能】：1、将所有片区信息显示到片区信息列表中；2、在“房屋资料”页面点击“添加按钮”时实现“所在片区”下拉框的数据回显。
     * @param current 前台传输过来的“当前页面”数；
     * @return  将分页后的片区内容返回给表现层。
     */
    @Override
    public HouseResult<PageInfo<MyArea>> findAllAreaPageInfo(Integer current) {
        //判断如果current的值不为空，则表示这是一个“分页显示所有房屋类型名称”到房屋类型列表中的请求；
        if(current != null) {
            /**使用分页技术*/
            //1、startPage方法：参数1：配置 “分页的初始页”；参数2：“当前页要显示的信息行数”
            PageHelper.startPage(current, StaticData.DEFAULT_PAGE_SIZE);

            //2、调用持久层数据库语句：查询所有片区信息的内容；
            List<MyArea> areaList = myAreaMapper.findAllAreaPageInfo();

            //3、将查询的所有片区信息内容进行分页
            PageInfo<MyArea> areaPageInfo = new PageInfo<>(areaList);

            //如果集合的大小不为0
            if (areaList.size() != 0) {
                //则将分页后的片区信息返回数据给表现层；
                return new HouseResult<>(0, "数据存在", areaPageInfo);
            }else {
                return new HouseResult<>(1, "数据不存在", areaPageInfo);
            }
        }else
        //如果current为空，则表示这是一个“查询所有房屋类型名称”进行房屋资料添加列表“房屋类型”下拉框数据回显的请求；
            {
                //调用持久层数据库语句：查询所有片区信息的内容（前台只取Name）；
                List<MyArea> allAreaName = myAreaMapper.findAllAreaPageInfo();

                //将查询到的所有房屋类型名称返回给表现层；
                return new HouseResult(0,"查询所有片区名称成功",allAreaName);
            }
    }


    /**
     * checkAreaAlread 【根据片区名查询一条片区内容】
     * @param myArea 片区名；
     * @return 将普安段结果放回给表现层。
     */
    @Override
    public HouseResult<MyArea> checkAreaAlread(MyArea myArea) {
        //调用持久层操作：根据片区名查询片区是否存在
        MyArea areas = myAreaMapper.checkAreaAlread(myArea);

        //为空表示片区不存在
        if(areas == null){
            return new HouseResult<>(1,"片区不存在",null);
        }else {
            //不为空表示片区已存在
            return new HouseResult<>(0,"对不起片区已存在",areas);
        }
    }


    /**
     * addAreaInfo 【添加片区信息】
     * @param myArea 添加弹窗输入的片区名称；
     * @return  将持久层返回的查询结果返回给表现层。
     */
    @Override
    public HouseResult<Object> addAreaInfo(MyArea myArea){
        //调用持久层操作：执行添加操作，返回一个int（执行影响的行数）；
        int successResult = myAreaMapper.addAreaInfo(myArea);

        //如果执行结果影响不为0，则表示添加成功；
        if(successResult != 0){
            return new HouseResult<>(0,"片区添加成功",successResult);
        }else {
            return new HouseResult<>(1,"片区添加失败",successResult);
        }
    }


    /**
     * findAreaByAid 【根据片区Id查询一条片区信息（实现修改弹窗数据回显）】
     * @param myArea 前台点击修改片区传输的片区Id；
     * @return 将查询到的回显数据返给表现层。
     */
    @Override
    public HouseResult<MyArea> findAreaByAid(MyArea myArea) {
        //调用持久层操作：根据片区Id查询一条片区信息
        MyArea areas = myAreaMapper.findAreaByAid(myArea);

        //将结果集返回给表现层
        return new HouseResult<>(0,"修改弹窗回显数据查询成功",areas);
    }


    /**
     * updateAreaInfo 【根据Id修改片区信息】
     * @param myArea “片区Id”和“片区原名称”
     * @return  将执行结果返回给表现层。
     */
    @Override
    public HouseResult<Object> updateAreaById(MyArea myArea) {
        //调用持久层操作：执行修改操作，返回一个int（执行影响的行数）；
        int successResult = myAreaMapper.updateAreaById(myArea);

        //如果执行结果影响不为0，则表示修改成功；
        if(successResult != 0){
            return new HouseResult<>(0,"修改片区成功",successResult);
        }else {
            return new HouseResult<>(1,"修改片区失败",successResult);
        }
    }

    /**
     * deleteAreaById 【根据Id删除片区信息】
     * @param myArea 片区Id；
     * @return 将执行结果返回给表现层。
     */
    @Override
    public HouseResult<Object> deleteAreaById(MyArea myArea) {
        //调用持久层操作：执行删除操作，返回一个int（执行影响的行数）；
        int successResult = myAreaMapper.deleteAreaById(myArea);

        //如果执行结果影响不为0，则表示删除成功；
        if(successResult != 0){
            return new HouseResult<>(0,"删除片区成功",successResult);
        }else {
            return new HouseResult<>(1,"删除片区失败",successResult);
        }
    }
}
